//@author wtfumlomglol
package amm.Graphic;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;


//AZ ablak kezelésért felelős osztály
public class DisplayController {

    private Game game;
    private Frame frame;
    private Display display;

    public DisplayController() {
        display = new Display();
        game = new Game(this);
        frame = new Frame("AMM grafikus");
        frame.add(display);
        frame.setSize(815, 640);

       //ablakot be lehssen zárni
        frame.addWindowListener(new WindowAdapter(){

            @Override
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        //billentyű nyomás figyelése
        display.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {

                if (e != null) {
                    //ha a menüben vagyunk
                    if (display.getMode()!=DisplayMode.CITYMAP)
                    {
                        //Esc - program bezárása
                        if (e.getKeyCode() == 27) System.exit(0);
                    }
                    //ha a játékban vagyunk
                    else
                    {
                        //Esc - kilépés a menübe
                        if (e.getKeyCode() == 27)
                        {
                            game.returnToMenu();
                            display.setMode(DisplayMode.MENUEMPTY);
                            display.setEvent(null);
                            display.display();
                        }
                        else if (e.getKeyCode() == 32) game.processCommand("tick 1");
                        //irányok megadása, és az autó lefékezése
                        //balra nyíl
                        else if (e.getKeyCode() == 37) game.processCommand("turn WEST");
                        //felfelé nyíl
                        else if (e.getKeyCode() == 38) game.processCommand("turn NORTH");
                        //jobbra nyíl
                        else if (e.getKeyCode() == 39) game.processCommand("turn EAST");
                        //lefelé nyíl
                        else if (e.getKeyCode() == 40) game.processCommand("turn SOUTH");
                        //'s'
                        else if (e.getKeyCode() == 83) game.processCommand("stopCriminal");
                    }
                }
            }
        });

        // egér mozgás figyelése, a menu-ben használjuk
        display.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                if (e!=null)
                {
                    int x = e.getX();
                    int y = e.getY();
                    if (display.getMode()!=DisplayMode.CITYMAP)
                    {
                        if (x>=20 && x<=190)
                        {
                            //'Új játék'-ra kattintva
                            if (y>=200 && y<=250)
                            {
                                display.setMode(DisplayMode.CITYMAP);
                                display.display();
                                display.setWonTime(false);
                                game.gameStart();
                                game.processCommand("gameStart");
                                
                            }
                            //'High scores'-ra kattintva
                            else if (y>=260 && y<=310) display.setMode(DisplayMode.MENUHIGHSCORES);
                            //'Controls'-ra kattintva
                            else if (y>=320 && y<=355) display.setMode(DisplayMode.MENUCONTROLS);
                            //'Credits'-re kattintva
                            else if (y>=365 && y<=400) display.setMode(DisplayMode.MENUCREDITS);
                        }
                        //egy titkos rész
                        if (display.getMode()==DisplayMode.MENUCREDITS){
                            if(x>=490 && x<=760 && y>=520 && y<=580) display.secret();
                        }
                    }
                    display.display();
                }
            }
        });

        frame.setVisible(true);
    }

    //a játék kirajzolása
    public void forceDisplay(ArrayList<String> newMap) {
        display.settime(game.gettime());
        display.setMap(newMap);
        display.display();
    }

    //a térkép inicializálása, kirajzolása
    public void initMap(ArrayList<String> roadmap)
    {
        display.initMap(roadmap);
    }

    //nyertes játék
    public void displayWin() {
        String winMsg = "U:R:S:A:F:E";
        display.setEvent(winMsg);
        display.setWonTime(true);
    }

    //vesztes játék, ha rendőr elkapott
    public void displayBusted() {
        String bustMsg = "B:U:S:T:E:D";
        display.setEvent(bustMsg);
         display.setWonTime(false);
    }
    
    //vesztes játék, ha ütköztünk
    public void displayWasted() {
        String wasteMsg = "W:A:S:T:E:D";
        display.setEvent(wasteMsg);
         display.setWonTime(false);
    }

    //menü kirajzolása
    public void drawMenu() {
        display.setMode(DisplayMode.MENUEMPTY);
        display.display();
    }
}
